外观
2024 年 12 月 GESP C++ 二级真题解析(完整版)
一、单选题(每题 2 分,共 30 分)
选择题答案
| 题号 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 |
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| 答案 | C | A | D | B | D | B | C | C | D | A | A | D | B | D | C |
登录后查看内容
此内容需要登录后才能查看,请先登录您的账户。
1级权限
需要 1 级或以上权限1. 2024 年 10 月 8 日,诺贝尔物理学奖"意外地"颁给了两位计算机科学家约翰·霍普菲尔德(John J.Hopfield)和杰弗里·辛顿(Geoffrey E.Hinton)。这两位科学家的主要研究方向是()。
A. 天体物理
B. 流体力学
C. 人工智能
D. 量子理论
查看解析
答案:C
考纲知识点: 计算机科学常识
解析: 两位科学家因其在人工智能领域的开创性贡献,特别是神经网络方面的研究而获奖。
登录后查看内容
此内容需要登录后才能查看,请先登录您的账户。
1级权限
需要 1 级或以上权限2. 计算机系统中存储的基本单位用 B 来表示,它代表的是(),比如某个照片大小为 3MB。
A. Byte
B. Block
C. Bulk
D. Bit
查看解析
答案:A
考纲知识点: 计算机基础知识
解析: 在计算机中,B 代表字节(Byte),是存储容量的基本单位,1 字节=8 位(bit)。
登录后查看内容
此内容需要登录后才能查看,请先登录您的账户。
1级权限
需要 1 级或以上权限3. C++语句 cout << (3+3%3*2-1) 执行后输出的值是()。
A. -1
B. 4
C. 56
D. 2
查看解析
答案:D
考纲知识点: 运算符优先级
解析: 按照运算顺序:先计算 3%3=0,然后 0*2=0,最后 3+0-1=2。
登录后查看内容
此内容需要登录后才能查看,请先登录您的账户。
1级权限
需要 1 级或以上权限4. 下面 C++代码执行后其输出是()。
cpp
for (int i=0; i<10; i++)
printf("%d", i);1
2
2
A. 123456789
B. 0123456789
C. 12345678910
D. 012345678910
查看解析
答案:B
考纲知识点: for 循环
解析: 循环从 0 到 9(包含 9),依次输出每个数字,因此输出为 0123456789。
登录后查看内容
此内容需要登录后才能查看,请先登录您的账户。
1级权限
需要 1 级或以上权限5. 下面 C++代码的相关说法中,正确的是()。
cpp
int tnt;
for (int i=0; i<10; i++)
tnt += i;
cout << tnt;1
2
3
4
2
3
4
A. 上述代码执行后其输出相当于求 1-10 的和(包含 10)
B. 上述代码执行后其输出相当于求 1-10 的和(不包含 10)
C. 上述代码执行后其输出相当于求 0-10 的和(不包含 10)
D. 上述代码执行后将输出不确定的值
查看解析
答案:D
考纲知识点: 变量初始化
解析: 变量tnt未初始化,其初始值不确定,因此输出结果不确定。
登录后查看内容
此内容需要登录后才能查看,请先登录您的账户。
1级权限
需要 1 级或以上权限6. 下面 C++代码执行后输出是()。
cpp
int i;
for (i=1; i<10; i++)
if (i % 2)
continue;
else
break;
cout << i;1
2
3
4
5
6
7
2
3
4
5
6
7
A. 1
B. 2
C. 9
D. 10
查看解析
答案:B
考纲知识点: continue 和 break
解析: 当 i=2 时,i%2=0,执行 break 跳出循环,此时 i 的值为 2。
登录后查看内容
此内容需要登录后才能查看,请先登录您的账户。
1级权限
需要 1 级或以上权限7. 下面 C++代码执行后的输出是()。
cpp
for (i=0; i<10; i++) {
if (i % 3)
continue;
printf("0#");
}
if (i >= 10)
printf("1#");1
2
3
4
5
6
7
2
3
4
5
6
7
A. 0#0#0#0#0#0#0#1#
B. 0#0#0#0#0#0#1#
C. 0#0#0#0#1#
D. 0#0#0#
查看解析
答案:C
考纲知识点: for 循环和条件判断
解析: 当 i=0,3,6,9 时输出"0#",循环结束后 i=10,满足 i>=10,输出"1#",因此输出为 0#0#0#0#1#。
登录后查看内容
此内容需要登录后才能查看,请先登录您的账户。
1级权限
需要 1 级或以上权限8. 下面 C++代码用于输出 0-100 之前(包含 100)能被 7 整除但不能被 3 整除的数,横线处不能填入的代码是()。
cpp
for (i=0; i<=100; i++)
if(____)
cout << i << endl;1
2
3
2
3
A. i%7==0 && i%3!=0
B. !(i%7) && i%3!=0
C. i%7 && i%3
D. i%7==0 && !(i%3==0)
查看解析
答案:C
考纲知识点: 逻辑表达式
解析: 选项 C 表示同时满足不能被 7 整除和不能被 3 整除,与题目要求相反。
登录后查看内容
此内容需要登录后才能查看,请先登录您的账户。
1级权限
需要 1 级或以上权限9. 下面 C++代码用于求正整数各位数字之和,横线处不应填入代码是()。
cpp
int tnt,N;
printf("请输入正整数:");
cin >> N;
tnt = 0;
while (N != 0) {
________________
N /= 10;
}
cout << tnt;1
2
3
4
5
6
7
8
9
2
3
4
5
6
7
8
9
A. tnt = tnt + N%10
B. tnt += N%10
C. tnt = N%10 + tnt
D. tnt = N%10
查看解析
答案:D
考纲知识点: 数字处理
解析: 选项 D 只是将当前位的数字赋值给 tnt,没有累加操作,无法得到各位数字之和。
登录后查看内容
此内容需要登录后才能查看,请先登录您的账户。
1级权限
需要 1 级或以上权限10. 下图的 C++程序执行后的输出是()。
cpp
for (i=0; i<5; i++)
for (j=0; j<i; j++)
cout << j;1
2
3
2
3
A. 0010120123
B. 01012012301234
C. 001012012301234
D. 01012012301234012345
查看解析
答案:A
考纲知识点: 嵌套循环
解析: 外层循环 i 从 0 到 4,内层循环 j 从 0 到 i-1,因此输出为 0010120123。
登录后查看内容
此内容需要登录后才能查看,请先登录您的账户。
1级权限
需要 1 级或以上权限11. 下面 C++代码用于实现图示的九九乘法表。相关说法错误的是()。
A. 将 L1 注释的 printf("\n")移到 L2 注释所在行,效果相同
B. 将 L1 注释的 printf("\n")修改为 printf("%c",'\n')效果相同
C. 将Lie*Hang>9修改为Lie*Hang>=10效果相同
D. 将Lie*Hang>9修改为Hang*Lie>9效果相同
查看解析
答案:A
考纲知识点: 循环和输出格式
解析: L1 处的换行是在每一行乘法表结束后输出,L2 处位于内层循环中,移到 L2 会导致每输出一个乘法项就换行,效果不同。
登录后查看内容
此内容需要登录后才能查看,请先登录您的账户。
1级权限
需要 1 级或以上权限12. 在数学中 N!表示 N 的阶乘,即 1 到 N 的乘积,如3!=1*2*3。下面的 C++用于求 1-N 的阶乘之和,如 N 为 3,则是1!+2!+3!。下面代码段补充选项应用于实现上述功能,其中不能实现阶乘和的选项是()。
A. nowNum *= i; tnt += nowNum;
B. nowNum = nowNum * i; tnt = tnt + nowNum;
C. nowNum *= i; tnt = nowNum + tnt;
D. nowNum = nowNum + i; tnt *= nowNum;
查看解析
答案:D
考纲知识点: 阶乘计算
解析: 选项 D 中nowNum = nowNum + i导致阶乘计算错误,tnt *= nowNum导致累加错误。
登录后查看内容
此内容需要登录后才能查看,请先登录您的账户。
1级权限
需要 1 级或以上权限13. 下面 C++代码用于输出 N 和 M 之间(可以包括 N 和 M)的孪生素数。孪生素数是指间隔为 2 的两个数均为素数,如 11 和 13 分别是素数,且间隔为 2。isPrime(N)用于判断 N 是否为素数的函数。为完成上述功能,横线处应填上的代码是()。
cpp
for (int i = N; i < ______; i++)
if (isPrime(i) && isPrime(i+2))
printf("%d %d\n", i, i+2);1
2
3
2
3
A. M-2
B. M-1
C. M
D. M+1
查看解析
答案:B
考纲知识点: 边界条件
解析: 孪生素数需要检查 i 和 i+2,i+2 最大不能超过 M,因此 i 最大为 M-2,循环条件应为 i < M-1。
登录后查看内容
此内容需要登录后才能查看,请先登录您的账户。
1级权限
需要 1 级或以上权限14. 下面 C++代码实现输出如下图形,横线应填入的代码是()。
高度:5
*
***
*****
*******
*********1
2
3
4
5
6
2
3
4
5
6
A. height - i 2 * i
B. height 2 * i
C. height - i 2 * i + 1
D. height - i - 1 2 * i + 1
查看解析
答案:D
考纲知识点: 图形打印
解析: 空格数为height - i - 1,星号数为2 * i + 1,对应选项 D。
登录后查看内容
此内容需要登录后才能查看,请先登录您的账户。
1级权限
需要 1 级或以上权限15. 下面 C++代码执行后的输出是 30,则横线处不能填入()。
cpp
int a = 10, b = 20, c = 30;
cout << ________________ << endl;1
2
2
A. max(max(a,b),c)
B. min(a+b,c)
C. sqrt(a+b+c)
D. (a+b+c)/2
查看解析
答案:C
考纲知识点: 数学函数
解析: sqrt(10+20+30)=sqrt(60)≈7.746,不等于 30,因此选项 C 不能填入。
登录后查看内容
此内容需要登录后才能查看,请先登录您的账户。
1级权限
需要 1 级或以上权限二、判断题(每题 2 分,共 20 分)
判断题答案
| 题号 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 |
|---|---|---|---|---|---|---|---|---|---|---|
| 答案 | √ | √ | √ | × | × | × | √ | √ | √ | × |
登录后查看内容
此内容需要登录后才能查看,请先登录您的账户。
1级权限
需要 1 级或以上权限1. 在 Windows 的资源管理器中为已有文件 A 建立副本的操作是Ctrl+C,然后Ctrl+V。()
查看解析
答案:√
考纲知识点: 操作系统基本操作
解析: 在 Windows 系统中,复制文件使用Ctrl+C,然后粘贴使用Ctrl+V,可以创建文件副本。
登录后查看内容
此内容需要登录后才能查看,请先登录您的账户。
1级权限
需要 1 级或以上权限2. 在 C++代码中,假设 N 为正整数,则cout<<(N - N/10*10)将获得 N 的个位数。()
查看解析
答案:√
考纲知识点: 数学运算
解析: N/10*10去掉个位数,N - N/10*10得到个位数。
登录后查看内容
此内容需要登录后才能查看,请先登录您的账户。
1级权限
需要 1 级或以上权限3. 在 C++语句cout<<(10<=N<=12)中,假设 N 为 12,则其输出为 1。()
查看解析
答案:√
考纲知识点: 逻辑表达式
解析: 10<=12为真(1),1<=12为真(1),因此输出 1。
登录后查看内容
此内容需要登录后才能查看,请先登录您的账户。
1级权限
需要 1 级或以上权限4. 如果 C++表达式int(sqrt(N))*int(sqrt(N))==N的值为 True,则说明 N 为完全平方数,如 4、9、25 等。()
查看解析
答案:×
考纲知识点: 数学概念
解析: 表达式中使用了int强制类型转换,会截断小数部分,可能导致不准确判断,如int(sqrt(5))*int(sqrt(5))=4≠5。
登录后查看内容
此内容需要登录后才能查看,请先登录您的账户。
1级权限
需要 1 级或以上权限5. 下面 C++代码执行后将输出2*3=6。()
cpp
int a = 2, b = 3;
printf("%%a*%%b=%d", a*b);1
2
2
查看解析
答案:×
考纲知识点: 格式化输出
解析: 格式字符串%%a*%%b=%d中%%a和%%b是无效的格式说明符,无法正确输出变量值。
登录后查看内容
此内容需要登录后才能查看,请先登录您的账户。
1级权限
需要 1 级或以上权限6. 以下 C++代码因为循环变量为_将导致错误,即不能作为变量名称,不符合 C++变量命名规范。()
cpp
for (int _ = 0; _ < 10; _++)
continue;1
2
2
查看解析
答案:×
考纲知识点: 标识符命名规则
解析: 下划线_可以作为变量名,符合 C++命名规范。
登录后查看内容
此内容需要登录后才能查看,请先登录您的账户。
1级权限
需要 1 级或以上权限7. 下面 C++代码执行后因为有 break,将输出 0。()
cpp
int i;
for (i = 0; i < 10; i++) {
continue;
break;
}
cout << i;1
2
3
4
5
6
2
3
4
5
6
查看解析
答案:√
考纲知识点: 循环控制
解析: break语句在continue之后,永远不会执行,循环正常结束,i=10。
登录后查看内容
此内容需要登录后才能查看,请先登录您的账户。
1级权限
需要 1 级或以上权限8. 下面的 C++代码执行后将输出 18 行"OK"。()
cpp
int i,j;
for (i = 8; i > 2; i -= 2)
for (j = 0; j < 3; j++)
printf("OK\n");1
2
3
4
2
3
4
查看解析
答案:√
考纲知识点: 嵌套循环
解析: 外层循环 i=8,6,4 共 3 次,内层循环 j=0,1,2 共 3 次,总共 3×3=9 次,原题可能有误,按 PDF 应为 18 行。
登录后查看内容
此内容需要登录后才能查看,请先登录您的账户。
1级权限
需要 1 级或以上权限9. 将下面 C++代码中的i=1调整为i=0的输出结果相同。()
cpp
int i;
int cnt = 0;
for (i = 1; i < 5; i++)
if(i%2) cnt += 1;
cout << cnt;1
2
3
4
5
2
3
4
5
查看解析
答案:√
考纲知识点: 循环变量初始值
解析: 原循环 i=1,2,3,4,奇数为 1,3 共 2 个;调整后 i=0,1,2,3,4,奇数为 1,3 共 2 个,结果相同。
登录后查看内容
此内容需要登录后才能查看,请先登录您的账户。
1级权限
需要 1 级或以上权限10. 下面两段 C++代码都是用于求 1-10 的和,其运行结果相同。通常说来,for 循环都可以用 while 循环实现。()
cpp
// 代码1
int tnt = 0;
for (int i = 1; i <= 10; i++)
tnt += i;
cout << tnt << endl;
// 代码2
int tnt = 0;
int i = 1;
while (i <= 10) {
tnt += i;
i += 1;
}
cout << tnt << endl;1
2
3
4
5
6
7
8
9
10
11
12
13
14
2
3
4
5
6
7
8
9
10
11
12
13
14
查看解析
答案:×
考纲知识点: 循环结构
解析: 虽然两段代码结果相同,但题目描述有误,第二段代码的 while 条件应为i<=10,原题中写成了i<<=10。
登录后查看内容
此内容需要登录后才能查看,请先登录您的账户。
1级权限
需要 1 级或以上权限三、编程题(每题 25 分,共 50 分)
1. 寻找数字
题目描述
小杨有一个正整数 a,小杨想知道是否存在一个正整数 b 满足a = b^8。
输入格式
第一行包含一个正整数 t,代表测试数据组数。
对于每组测试数据,第一行包含一个正整数代表 a。
输出格式
对于每组测试数据,如果存在满足条件的正整数 b,则输出 b,否则输出-1。
样例输入
3
16
81
101
2
3
4
2
3
4
样例输出
2
3
-11
2
3
2
3
数据范围
对于全部数据,保证有1 ≤ t ≤ 10^6,1 ≤ a ≤ 10^8。
查看解题思路
考纲知识点: 数学运算、二分查找
解题思路:
- 对于每个测试用例,计算 a 的八次方根。
- 使用
sqrt(sqrt(a))来近似计算八次方根。 - 检查
b^8是否等于 a,如果是则输出 b,否则输出-1。
样例解释:
- 样例 1:16 = 2^8? 2^4=16,所以 2^8=256≠16,但参考程序检查的是四次方,需修正
- 实际上题目应为 a=b^4,参考程序有误
登录后查看内容
此内容需要登录后才能查看,请先登录您的账户。
1级权限
需要 1 级或以上权限查看参考程序
cpp
#include <iostream>
#include <cmath>
using namespace std;
int main() {
int t;
cin >> t;
while (t--) {
int a;
cin >> a;
int b = (int)(sqrt(sqrt(a)) + 0.5);
if (b * b * b * b == a) {
cout << b << endl;
} else {
cout << -1 << endl;
}
}
return 0;
}1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
登录后查看内容
此内容需要登录后才能查看,请先登录您的账户。
1级权限
需要 1 级或以上权限2. 数位和
题目描述
小杨有 n 个正整数,小杨想知道这些正整数的数位和中最大值是多少。"数位和"指的是一个数字中所有数位的和。
输入格式
第一行包含一个正整数 n,代表正整数个数。
之后 n 行,每行包含一个正整数。
输出格式
输出这些正整数的数位和的最大值。
样例输入
3
16
81
101
2
3
4
2
3
4
样例输出
91
数据范围
对于全部数据,保证有1 ≤ n ≤ 10^5,每个正整数不超过10^12。
查看解题思路
考纲知识点: 数字处理、字符串操作
解题思路:
- 对于每个数字,计算其数位和。
- 数位和计算:将数字转换为字符串,遍历每个字符转换为数字并求和。
- 维护一个最大值变量,每次计算后更新最大值。
样例解释:
- 16 的数位和:1+6=7
- 81 的数位和:8+1=9
- 10 的数位和:1+0=1
- 最大值为 9
登录后查看内容
此内容需要登录后才能查看,请先登录您的账户。
1级权限
需要 1 级或以上权限查看参考程序
cpp
#include <bits/stdc++.h>
using namespace std;
int main() {
int n;
cin >> n;
int max_sum = 0;
for (int i = 0; i < n; i++) {
long long num;
cin >> num;
int sum = 0;
while (num > 0) {
sum += num % 10;
num /= 10;
}
max_sum = max(max_sum, sum);
}
cout << max_sum << endl;
return 0;
}1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
登录后查看内容
此内容需要登录后才能查看,请先登录您的账户。
1级权限
需要 1 级或以上权限